package com.ysq;

import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDemo {
    public static void main(String[] args) {
        List<String>names=new ArrayList<>();
        names.add("张三");
        names.add("张四");
        names.add("张三丰");
        names.add("张六");
        names.add("张无极");
        names.add("张八");
        names.add("张九");
        names.add("张十一");
        names.add("王十一");
        names.add("杨十一");

        List<String> list1 = new ArrayList<>();
        // 遍历names集合
        names.forEach(name -> {
            // name以张开头？
            if (name.startsWith("张")) { // 移除多余的分号
                // 添加到list1集合中
                list1.add(name);
            }
        });

        List<String> list2 = new ArrayList<>();
        list1.forEach(name -> {
            if (name.length() == 3) {
                list2.add(name);
            }
        });
        list2.forEach(System.out::println);


        System.out.println("-----------------------------");
        //1.获取集合的流对象stream对象
        //2.筛选、获取符合条件的元素
        //3.终结方法
        names.stream()
                .filter(s -> s.startsWith("张"))
                .filter(s -> s.length()==3)
                .forEach(System.out::println);



    }
    @Test
    public  void  test1(){
        List<Integer>list =new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        list.add(8);
        list.add(9);
        list.add(10);

        //最后调用收集方法
        List<Integer> list1 = list.stream()
                .filter(integer -> integer % 2 == 0).toList();
        System.out.println(list1);

    }

    @Test
    public void test2(){
    List<String>list=new ArrayList<>();
    list.add("zhangsan,23");
    list.add("lisi,24");
    list.add("wangwu,25");
    //过滤年龄大于等于24岁的
        Map<Object, Object> map=list.stream().filter(s -> {
        //将s切分开
        String[] split = s.split(",");
        //拿到年龄（转成int）
        int age= Integer.parseInt(split[1]);
        return age>=24;
    }).collect(Collectors.toMap(s -> {
        String[] split = s.split(",");
        return split[0];
    }, s -> {
        String[] split = s.split(",");
        return split[1];
    }));
            map.forEach((k,v)->{
                System.out.println(k+"--"+v);
            });
    }

    @Test
    public void test3(){
        List<String> list1 = new ArrayList<>();
        list1.add("李昀锐");
        list1.add("刘耀文");
        list1.add("邓超");
        list1.add("王宝强");
        list1.add("张学友");
        list1.add("成龙");

        List<String> list2 =new ArrayList<>();
        list2.add("杨颖");
        list2.add("古力娜扎");
        list2.add("赵丽颖");
        list2.add("高圆圆");
        list2.add("杨紫");
        list2.add("林志玲");

        Stream<String> stream1= list1.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.length()== 3;
            }
        }).limit(2);

        Stream<String> stream2 = list2.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("杨");
            }
        }).skip(1);
        //合并流
        Stream.concat(stream1,stream2).forEach(System.out::println);
    }

}
